package com.king.pattem.observer;

import java.util.*;

class TieDaoBu extends Observable {    // 表示铁道部可以被观察
	private String message;// 官方消息

	public TieDaoBu(String message) {
		this.message = message;
	}

	public String getMessage() {
		return this.message;
	}

	public void setMessage(String message) {
		// 每一次修改的时候都应该引起观察者的注意
		System.out.println("****************************************");
		System.out.println(new Date() + "官方发布消息为：" + message);
		super.setChanged();    // 设置变化点
		super.notifyObservers(message);// 通知所有观察者
		this.message = message;
	}
}

class TieDaoBuObserver implements Observer {
	private String name;

	public TieDaoBuObserver(String name) {    // 设置每一个观察者的名字
		this.name = name;
	}

	public void update(Observable o, Object arg) {
		System.out.print(this.name + " 官方消息更改为：");
		System.out.println(arg.toString());
	}
}

public class JDKObserverDemo {
	public static void main(String args[]) {
		TieDaoBu h = new TieDaoBu("温州火车出轨体现了我国高铁世界技术水平领先，和谐社会和谐号出事了");
		TieDaoBuObserver hpo1 = new TieDaoBuObserver("媒体A");
		TieDaoBuObserver hpo2 = new TieDaoBuObserver("屁民B");
		TieDaoBuObserver hpo3 = new TieDaoBuObserver("日本韩国嘲笑者C");
		h.addObserver(hpo1);
		h.addObserver(hpo2);
		h.addObserver(hpo3);

		h.setMessage("搜救结束，经生命探测仪发现没有生命迹象");    // 修改官方消息

		h.setMessage("搜救结束了，还发现了一名2岁的女孩，真是奇迹");    // 修改官方消息

		h.setMessage("35一个神奇的数字,动车相撞35人死亡,河南平顶山矿难35人死亡," +
				"重庆暴雨35人死亡,云南大雨35人死亡。" +
				"为什么死亡人数控制在36人以内？" +
				"超过36人市委书记级别的要撤职，所以一开始发生就注定了死亡人数不会超过36。" +
				"而事实上,我在查看国外报纸报道," +
				"华尔街日报说,这次动车事故,其中有47人死亡,200余人受伤");    // 修改官方消息
	}
}